package announcement.model;

import java.sql.SQLException;
import java.util.ArrayList;

import to.AnnounceListTO;
import to.AnnouncementTO;
import to.PagingTO;
import announcement.util.Utilities;

public class AnnounceService {
	private AnnounceDAO dao;

	public AnnounceService(AnnounceDAO dao) {
		this.dao = dao;
	}		
	//전체조회 하는 메소드
	public ArrayList<AnnouncementTO> getAnnounceAllList() throws SQLException{
		return dao.selectAnnouncementByAll();
	}
	//글입력 처리를 하는 Business 메소드
	public void writeContent(AnnouncementTO ato) throws SQLException{
	ato.setWritedate(Utilities.getNow());//bto에 작성일시를 설정
	ato.setContent(Utilities.changeContentForDB(ato.getContent()));
	
	dao.insertAnnouncement(ato);			
	}
	public AnnouncementTO getContentByNO(int no) throws SQLException{
		//1. 조회수 증가
		dao.updateViewCount(no);
		//2. no로 글 정보 조회
		AnnouncementTO ato = dao.selectAnnouncementByNo(no);
		//2-1 writedate를 yyyy.MM.dd HH:mm:ss 형식으로 변경
		ato.setWritedate(Utilities.changeDayTimeFormat(ato.getWritedate()));
		return ato;
	}
	public AnnouncementTO getContentByNoForForm(int no) throws SQLException{
		//1. no값으로 글 조회
		AnnouncementTO bto = dao.selectAnnouncementByNo(no);
		//2. content를 textarea용으로 변경
		bto.setContent(Utilities.changeContentForTextArea(bto.getContent()));
		return bto;
	}
	public void modifyContent(AnnouncementTO ato) throws SQLException{
		//1. property변경 - content, writedate
		ato.setContent(Utilities.changeContentForDB(ato.getContent()));
		ato.setWritedate(Utilities.getNow());
		//2. 수정 처리
		dao.updateContent(ato);
		//3. writedate 포멧 변경 - 멱등처리(redirect전송)의 경우 아래 코드는 필요없음
		ato.setWritedate(Utilities.changeDayTimeFormat(ato.getWritedate()));
	}
	public void deleteContentByNO(int no) throws SQLException{
		dao.deleteContentByNO(no);
	}		
		
	//페이징 리스트 조회
		public AnnounceListTO getAnnounceListByPage(int page) throws SQLException{
			//1. dao로부터 전체 글내용을 ArrayList로 조회
			ArrayList<AnnouncementTO> list = dao.selectAnnouncementByPage(page);
			//2 list내의 BoardDTO객체들의 writedate를 변경
			for(AnnouncementTO ato:list){
				ato.setWritedate(Utilities.changeDayFormat(ato.getWritedate()));
			}
			//3. PagingDTO객체를 생성
			// 	3.1. - dao.selectTotalContent() - 총게시물 수를 리턴
			int totalContent = dao.selectTotalContent();
			PagingTO pagingTO = new PagingTO(totalContent, page);
			//4. ArrayList, PagingDTO객체를 이용해 ListDTO를 생성해서 return
			AnnounceListTO lto = new AnnounceListTO(list, pagingTO);
			return lto;
		}
}
